package com.zenithmind.news.service.impl;

import com.zenithmind.news.mapper.NewsMapper;
import com.zenithmind.news.service.NewsInteractionService;
import com.zenithmind.news.service.NewsStatisticsService;
import com.zenithmind.news.service.UserBehaviorService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 新闻交互服务实现类 - 遵循单一职责原则
 * 专门负责用户与新闻的交互操作（点赞、收藏、分享等）
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class NewsInteractionServiceImpl implements NewsInteractionService {

    private final UserBehaviorService userBehaviorService;
    private final NewsStatisticsService newsStatisticsService;

    @Override
    public Boolean likeNews(String newsId, String userId) {
        try {
            // 记录用户行为
            userBehaviorService.recordBehavior(userId, newsId, 2, null, 2.0);
            // 更新统计信息
            newsStatisticsService.updateNewsStatistics(newsId, 0L, 1L, 0L, 0L, 0L);
            
            log.debug("用户 {} 点赞新闻 {}", userId, newsId);
            return true;
        } catch (Exception e) {
            log.error("点赞新闻失败：用户={}, 新闻={}", userId, newsId, e);
            return false;
        }
    }

    @Override
    public Boolean unlikeNews(String newsId, String userId) {
        try {
            // 更新统计信息（减少点赞数）
            newsStatisticsService.updateNewsStatistics(newsId, 0L, -1L, 0L, 0L, 0L);
            
            log.debug("用户 {} 取消点赞新闻 {}", userId, newsId);
            return true;
        } catch (Exception e) {
            log.error("取消点赞新闻失败：用户={}, 新闻={}", userId, newsId, e);
            return false;
        }
    }

    @Override
    public Boolean favoriteNews(String newsId, String userId) {
        try {
            // 记录用户行为
            userBehaviorService.recordBehavior(userId, newsId, 3, null, 3.0);
            // 更新统计信息
            newsStatisticsService.updateNewsStatistics(newsId, 0L, 0L, 1L, 0L, 0L);
            
            log.debug("用户 {} 收藏新闻 {}", userId, newsId);
            return true;
        } catch (Exception e) {
            log.error("收藏新闻失败：用户={}, 新闻={}", userId, newsId, e);
            return false;
        }
    }

    @Override
    public Boolean unfavoriteNews(String newsId, String userId) {
        try {
            // 更新统计信息（减少收藏数）
            newsStatisticsService.updateNewsStatistics(newsId, 0L, 0L, -1L, 0L, 0L);
            
            log.debug("用户 {} 取消收藏新闻 {}", userId, newsId);
            return true;
        } catch (Exception e) {
            log.error("取消收藏新闻失败：用户={}, 新闻={}", userId, newsId, e);
            return false;
        }
    }

    @Override
    public Boolean shareNews(String newsId, String userId, String platform) {
        try {
            // 记录用户行为
            userBehaviorService.recordBehavior(userId, newsId, 4, platform, 1.5);
            // 更新统计信息
            newsStatisticsService.updateNewsStatistics(newsId, 0L, 0L, 0L, 1L, 0L);
            
            log.debug("用户 {} 分享新闻 {} 到 {}", userId, newsId, platform);
            return true;
        } catch (Exception e) {
            log.error("分享新闻失败：用户={}, 新闻={}, 平台={}", userId, newsId, platform, e);
            return false;
        }
    }
}
